package com.vtuzx.kingdee.xqc_api.service;

import com.vtuzx.core.VtuzxException;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.core.bean.dto.VtuzxToken;
import com.vtuzx.web.bean.VtuzxDownloadBean;
import org.bson.types.ObjectId;

import java.util.List;
import java.util.Map;

/**
 * 接口调用履历服务
 */
public interface IXqcBasicService {

    /**
     * 删除物料
     */
    void deleteMaterial(VtuzxToken token, List<String> ids);

    /**
     * 根据Key查询物料(名称和物料编码)
     */
    VtuzxMap getMaterial(VtuzxToken token, String key, int pageSize);

    /**
     * 根据Key查询供应商(名称和编码)
     */
    VtuzxMap getSupplierByKey(VtuzxToken token, String key, int pageSize, int pageIndex);

    /**
     * 查询物料
     */
    VtuzxMap getMaterial(VtuzxToken token, Map<String, Object> param);

    /**
     * 刷新物料
     *
     * @param token Token
     */
    void syncMaterial(VtuzxToken token, Map<String, Object> p);

    /**
     * 获取同步物料处理结果
     *
     * @param token Token
     * @param param 入参
     * @return 销售单接口调用履历列表
     */
    VtuzxMap getMaterialReloadResult(VtuzxToken token, Map<String, Object> param);

    /**
     * 删除仓库
     */
    void deleteStock(VtuzxToken token, List<String> ids);

    /**
     * 查询仓库
     */
    VtuzxMap getStock(VtuzxToken token, Map<String, Object> param);

    /**
     * 刷新仓库
     *
     * @param token Token
     */
    void syncStock(VtuzxToken token, Map<String, Object> p);


    /**
     * 获取同步仓库处理结果
     *
     * @param token Token
     * @param param 入参
     * @return 销售单接口调用履历列表
     */
    VtuzxMap getStockReloadResult(VtuzxToken token, Map<String, Object> param);

    /**
     * 删除供应商
     */
    void deleteSupplier(VtuzxToken token, String fNumber);

    /**
     * 查询供应商
     */
    VtuzxMap getSupplier(VtuzxToken token, Map<String, Object> param);

    /**
     * 刷新供应商
     *
     * @param token Token
     */
    void syncSupplier(VtuzxToken token, Map<String, Object> p);


    /**
     * 获取同步供应商处理结果
     *
     * @param token Token
     * @param param 入参
     * @return 销售单接口调用履历列表
     */
    VtuzxMap getSupplierReloadResult(VtuzxToken token, Map<String, Object> param);

    /**
     * 获取仓库的仓位列表
     *
     * @param stockNo 仓库编码
     * @return 仓库的仓位列表
     */
    VtuzxMap getStockLocations(String stockNo);

    /**
     * 获取仓位信息
     *
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @return 仓库的仓位列表
     */
    VtuzxMap getStockLocation(String stockNo, String locationNo) throws VtuzxException;



    /**
     * 获取采购收货单物料列表
     *
     * @param fNumber 单号
     * @return 采购收货单物料箱号列表
     */
    VtuzxMap getStockDetail(String fNumber) throws VtuzxException;

    /**
     * 保存仓库详细（仓位）
     */
    VtuzxMap saveStockDetail(Map<String, Object> param) throws VtuzxException;


    VtuzxMap getCustomerStock(ObjectId userId);

    VtuzxMap stockToGetLocation(String stockNo);

    /**
     * 获取部门
     * @param token
     * @param param
     * @throws Exception
     */
    void getDepartment(VtuzxToken token, Map<String, Object> param) throws Exception;

    /**
     * 查询部门列表
     * @param token
     * @param param
     * @return
     */
    VtuzxMap getDepartmentList(VtuzxToken token, Map<String, Object> param);

    void getEmpInfo(VtuzxToken token, Map<String, Object> param) throws Exception;

    void addTray(VtuzxToken token, Map<String, Object> param) throws VtuzxException;

    VtuzxMap getTrayList(VtuzxToken token, Map<String, Object> param);

    void updateTray(VtuzxToken token, Map<String, Object> param);

    void deleteTray(VtuzxToken token, Map<String, Object> param);

    /**
     * 删除BOM
     * @param token
     * @param ids
     */
    void deleteBom(VtuzxToken token, List<String> ids);

    /**
     * 获取BOM
     * @param token
     * @param key
     * @param pageSize
     * @return
     */
    VtuzxMap getBom(VtuzxToken token, String key, int pageSize, int pageIndex);

    /**
     * 获取BOM
     * @param token
     * @param param
     * @return
     */
    VtuzxMap getBom(VtuzxToken token, Map<String, Object> param);

    /**
     * 同步BOM
     * @param token
     * @param param
     */
    void syncBom(VtuzxToken token, Map<String, Object> param);

    /**
     * 获取同步BOM处理结果
     * @param token
     * @param param
     * @return
     */
    VtuzxMap getBomReloadResult(VtuzxToken token, Map<String, Object> param);

    /**
     * 更新供应商
     * @param token
     * @param param
     */
    void updateSupplier(VtuzxToken token, Map<String, Object> param);

    /**
     * 创建追溯码
     * @param token
     * @param param
     */
    void createTraceabilityCode(VtuzxToken token, Map<String, Object> param) throws InterruptedException, VtuzxException;

    /**
     * 获取追溯码列表
     * @param token
     * @param param
     * @return
     */
    VtuzxMap getTraceabilityCodeList(VtuzxToken token, Map<String, Object> param);

    /**
     * 获取追溯码详细
     * @param token
     * @param param
     * @return
     */
    VtuzxMap getTraceabilityCodeDetail(VtuzxToken token, Map<String, Object> param);

    /**
     * 删除追溯码
     * @param token
     * @param param
     */
    void deleteTraceabilityCode(VtuzxToken token, Map<String, Object> param);

    void updateMaterial(VtuzxToken token, Map<String, Object> param);

    VtuzxMap saveGetMaterialByKey(VtuzxToken token, String key, int pageSize, int pageIndex);

    VtuzxDownloadBean downloadMaterial(VtuzxToken token, Map<String, Object> param)throws Exception;

    /**
     * 恢复供应商
     * @param token
     * @param fNumber
     */
    void restoreSupplier(VtuzxToken token, String fNumber);

    /**
     * 导出托盘
     * @param token
     * @param param
     * @return
     */
    VtuzxDownloadBean downloadTrayList(VtuzxToken token, Map<String, Object> param)throws Exception;
}
